In a server-client remote graphics processing arrangement, graphics content is rendered and encoded at a central server and then transferred to a client. The client decodes the video stream and pan-scans the content based on the viewport of the client's display. As the viewport of the client's display is not known to the server at the time of encoding, the entirety of the rendered graphics content is encoded and transferred to the client. As such, when large or ultra-high resolution content is rendered, encoding and transferring such surface places tremendous burden on the encode engine of the server and the bus, e.g., a Peripheral Component Interconnect (PCI) or a network, over which the surface is transferred to the client.
For example, System A, i.e. a central server, renders a large mosaic surface having a resolution of 16K×16K, using, for example, Nvidia®'s Mosaic multi-display technology. System B, i.e. a client, wants to display this surface on a display having a resolution of 4K×2K. But encoding the rendered 16K×16K surface on System A is problematic due to the limitations of the encode engine in the server; even the most advanced encode engine, e.g., Nvidia®'s Maxwell's encode engine, can only encode up to 4K×4K surface. As such, the surface is copied unencoded from System A's video memory to its system memory. The transfer of this raw (unencoded) data chokes the bus inside the System A and slows down other processes simultaneously running on the System A. Moreover, when this raw data is transferred from System A to System B, it also chokes the bus between the systems.
Previously, some of these problems were alleviated by using Windows device drivers, e.g., Mirror Driver, in a virtual networking computing environment. However, such device drivers do not work well with some of the current Windows features, e.g., AERO, because they alter the original details of the large (ultra-high resolution) surface when rendering and in some cases, is just too slow to use.